package com.qingcheng.handler;

import com.qingcheng.dao.TbSkuMapper;
import com.qingcheng.dao.TbSpuMapper;
import com.qingcheng.pojo.goods.TbSku;
import com.qingcheng.pojo.goods.TbSpu;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import tk.mybatis.mapper.entity.Example;

import javax.annotation.Resource;
import java.io.IOException;
import java.util.List;

/**
 * @ClassName RabbitMqConsumer
 * @Description
 * @Author Simon
 * @Date 2020/8/31 20:01
 * @Version 1.0
 **/
@Component
@Slf4j
public class RabbitMqConsumer {

    @Resource
    private TbSpuMapper tbSpuMapper;

    @Resource
    private TbSkuMapper tbSkuMapper;

    @Autowired
    private InsElasticSearchHandler es;

    /**
     * 处理上下架（都是这一个方法）
     * sku表格并没有上下架的这个列，需要和spu关联起来
     * 先根据id查询到spu表的数据，再判断上架的状态
     * 如果为1则表示上架，则向elasticsearch插入索引数据
     * 没有则删除索引数据
     * @Param id spuId
     * @Author Simon
     */
    @RabbitListener(queues = "queue.standUD")
    public void StandUpAndDown (String id){
        log.info("spuId:"+id);
        // 查询spu的数据
        TbSpu tbSpu = tbSpuMapper.selectByPrimaryKey(id);
        // 根据spuId查询sku关联的数据
        Example example = new Example(TbSku.class);
        Example.Criteria criteria = example.createCriteria();
        criteria.andEqualTo("spuId",id);
        List<TbSku> tbSkus = tbSkuMapper.selectByExample(example);
        // 新增索引，1表示为上架
        if (tbSpu.getIsMarketable().equals("1")) {
            // es封装的批量新增
            try {
                es.insOrDel(tbSkus,"ins");
            } catch (IOException e) {
                e.printStackTrace();
            }
        } else { // 删除索引
            // 删除指定的索引值
            try {
                es.insOrDel(tbSkus,"del");
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

    }

}
